package com.strategy.demo1.main;

import com.strategy.demo1.Duck;
import com.strategy.demo1.MallardDuck;
import com.strategy.demo1.ModelDuck;
import com.strategy.demo1.impl.FlyRocketPowered;

/**
 * 策略模式（定义了算法族，分别封装起来，让他们之间可以互相替换，此模式让算法的变化独立于使用算法的客户）
 * 
 * @author dell
 * 
 */
public class MiniDuckSimulator {

	public static void main(String[] args) {
		Duck mallard = new MallardDuck();
		mallard.performQuack();
		mallard.performFly();

		Duck model = new ModelDuck();
		model.performFly();
		// 这会调用继承来的setter方法，把火箭动力飞行的行为设定到模型鸭中。哇！模型鸭突然具有了火箭动力飞行能力！
		model.setFlyBehavior(new FlyRocketPowered());
		model.performFly();
	}

}
